package br.com.equus.entidade;

import static javax.persistence.GenerationType.IDENTITY;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.hibernate.envers.Audited;

import br.com.arquitetura.entidade.Entidade;

@Entity
@Table(name = "EQ_ENTRADA", catalog = "EQUUS")
@Audited
public class Entrada extends Entidade<Integer> {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = IDENTITY)
	@Column(name = "ID_ENTRADA", unique = true, nullable = false)
	private Integer id;

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_FORNECEDOR", referencedColumnName = "ID_FORNECEDOR", nullable = false)
	private Fornecedor fornecedor;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DT_PEDIDO", nullable = false)
	private Date dtPedido;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = "DT_ENTRADA", nullable = false)
	private Date dtEntrada;

	@Column(name = "VLR_TOTAL", nullable = false)
	private Double valorTotal;

	@Column(name = "VLR_FRETE", nullable = false)
	private Double valorFrete;

	@Column(name = "NUM_NF", nullable = false, length = 255)
	private String notaFiscal;

	@OneToMany(mappedBy = "entrada", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private Set<ItemEntrada> itens = new HashSet<ItemEntrada>();

	@Transient
	private List<ItemEntrada> itensExcluir = new ArrayList<ItemEntrada>();

	@Transient
	private String valorTotalToString;

	@Transient
	private String valorFreteToString;

	public Entrada() {
		// TODO Auto-generated constructor stub
	}

	public Entrada(Integer id) {
		this.id = id;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Date getDtPedido() {
		return dtPedido;
	}

	public void setDtPedido(Date dtPedido) {
		this.dtPedido = dtPedido;
	}

	public Date getDtEntrada() {
		return dtEntrada;
	}

	public void setDtEntrada(Date dtEntrada) {
		this.dtEntrada = dtEntrada;
	}

	public Double getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(Double valorTotal) {
		this.valorTotal = valorTotal;
	}

	public Double getValorFrete() {
		return valorFrete;
	}

	public void setValorFrete(Double valorFrete) {
		this.valorFrete = valorFrete;
	}

	public String getNotaFiscal() {
		return notaFiscal;
	}

	public void setNotaFiscal(String notaFiscal) {
		this.notaFiscal = notaFiscal;
	}

	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public String getValorTotalToString() {
		return valorTotalToString;
	}

	public void setValorTotalToString(String valorTotalToString) {
		this.valorTotalToString = valorTotalToString;
	}

	public String getValorFreteToString() {
		return valorFreteToString;
	}

	public void setValorFreteToString(String valorFreteToString) {
		this.valorFreteToString = valorFreteToString;
	}

	public Set<ItemEntrada> getItens() {
		return itens;
	}

	public void setItens(Set<ItemEntrada> itens) {
		this.itens = itens;
	}

	public List<ItemEntrada> getItensExcluir() {
		return itensExcluir;
	}

	public void setItensExcluir(List<ItemEntrada> itensExcluir) {
		this.itensExcluir = itensExcluir;
	}

}
